package cn.itcast.web.shiro;

import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.credential.SimpleCredentialsMatcher;
import org.apache.shiro.crypto.hash.Md5Hash;

/**
 * 自定义凭证匹配器，注意如果要生效，需要配置
 */
public class CustomCredentialsMatcher extends SimpleCredentialsMatcher {
    /**
     * 自定义凭证匹配器，密码校验的方法
     * @param token 封装用户输入的账号密码信息
     * @param info 封装认证后的身份信息（realm认证方法返回值）
     * @return 校验成功返回true，校验失败返回false
     */
    @Override
    public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
        //1. 获取用户输入的email
        String email = (String) token.getPrincipal();
        //2. 获取用户输入的密码
        String inputPwd = new String((char[]) token.getCredentials());

        //3. 对用户输入的密码加密、加盐
        String encodePwd = new Md5Hash(inputPwd,email).toString();

        //4. 获取数据库中正确的密码
        Object dbPwd = info.getCredentials();
        //5. 判断
        return encodePwd.equals(dbPwd);
    }
}
